﻿'Creado por Manuel Chaves

Public Class Gestor
#Region "chaves"

    ''' <summary>
    ''' Lista los departamentos.
    ''' </summary>
    ''' <returns> lista con departamentos
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function listarDepartamentos() As List(Of Hashtable)
        Dim lista = MultiDepartamento.buscar("", "")
        Dim listaHash As New List(Of Hashtable)
        For Each obj As Departamento In lista
            listaHash.Add(CType(obj, Departamento).toHashTable)
        Next
        Return listaHash
    End Function

    ''' <summary>
    ''' Agrega un nivel
    ''' </summary>
    ''' <param name="p_codigoDepartamento">codigo departamento</param>
    ''' <param name="p_nivel">Nivel</param>
    ''' <param name="p_salarioMaximo">salarioMaximo</param>
    ''' <param name="p_salarioMinimo">salarioMinimo</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub agregarNivel(ByVal p_codigoDepartamento As String, ByVal p_nivel As String, _
                   ByVal p_salarioMinimo As String, ByVal p_salarioMaximo As String)
        MultiNivel.crear(CType(p_codigoDepartamento, Integer), CType(p_nivel, Integer), _
                         CType(p_salarioMinimo, Double), CType(p_salarioMaximo, Double))
    End Sub

    ''' <summary>
    ''' Obtiene un nivel
    ''' </summary>
    ''' <param name="p_codigo">codigo del nivel</param>
    ''' <returns>un hashtable con los datos de un nuvel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerNivel(ByVal p_codigo As String) As Hashtable
        Dim objNivel = MultiNivel.obtener(CType(p_codigo, Integer))
        Return objNivel.toHashTable
    End Function

    ''' <summary>
    ''' Obtiene una lista con los niveles de un departamento.
    ''' </summary>
    ''' <param name="p_codigoDepartamento">codigo del departamento.</param>
    ''' <returns>Una lista con los niveles
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function listarNivelesPorDepartamento(ByVal p_codigoDepartamento As Integer) As List(Of Hashtable)
        Dim listaNiveles = MultiNivel.listarPorDepartamento(p_codigoDepartamento)
        Dim listaHash As New List(Of Hashtable)
        For Each obj As Nivel In listaNiveles
            listaHash.Add(obj.toHashTable())
        Next
        Return listaHash
    End Function

    ''' <summary>
    ''' Obtiene el nombre de un departamento
    ''' </summary>
    ''' <param name="p_codigo">codigo del dept</param>
    ''' <returns>nombre del dept
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerNombreDepartamentoPorCodigo(ByVal p_codigo) As String
        Dim nomDept As String
        Dim dept As Departamento
        Dim listaDept = MultiDepartamento.buscar(p_codigo, "")
        dept = listaDept.Item(0)
        nomDept = dept.nombre
        Return nomDept
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub actualizarNivel(ByVal p_codigo As String, ByVal p_salarioMinimo As Double, ByVal p_salarioMaximo As Double)
        MultiNivel.actualizar(CType(p_codigo, Integer), p_salarioMinimo, p_salarioMaximo)
    End Sub

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function eliminarNivel(ByVal p_codigo As String) As Boolean
        Try
            MultiNivel.eliminar(CType(p_codigo, Integer))
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub registrarPuesto(ByVal p_nombre As String, ByVal p_descripcion As String, ByVal p_nivel As Integer, _
                                      ByVal p_tipoSalario As Integer, ByVal p_salario As String)
        MultiPuesto.crear(p_nombre, p_descripcion, p_nivel, p_tipoSalario, CType(p_salario, Double))
    End Sub

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerPuesto(ByVal p_codigo As String) As Hashtable
        Dim objPuesto As Puesto
        objPuesto = MultiPuesto.obtener(CType(p_codigo, Integer))
        Return objPuesto.toHashTable
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerNombreDepartamentoPorCodigoNivel(ByVal p_codigoNivel As Integer) As String
        Dim objNivel As Nivel
        Dim nombreDept As String
        objNivel = MultiNivel.obtener(p_codigoNivel)
        nombreDept = Gestor.obtenerNombreDepartamentoPorCodigo(objNivel.codigoDepartamento)
        Return nombreDept
    End Function

    ''' <summary>
    ''' Revisa si el nivel esta eliminado
    ''' </summary>
    ''' <param name="p_codigo">Codigo del nivel</param>
    ''' <returns>Verdadero si esta eliminado</returns>
    ''' <remarks></remarks>
    Public Shared Function revisarEliminadoNivel(ByVal p_codigo) As Boolean
        Dim elim = MultiNivel.revisarEliminado(p_codigo)
        If elim = 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="p_codigoDept"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function obtenerPrimerNivelDeDepartamento(ByVal p_codigoDept) As Integer
        Dim listaNiveles = listarNivelesPorDepartamento(p_codigoDept)
        Dim ht = listaNiveles.Item(0)
        Dim codigoNivel = ht("codigo")
        Return codigoNivel
    End Function

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="p_codigoNivel"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function revisarHayPuestosEnNivel(ByVal p_codigoNivel) As Boolean
        Dim lista = listarPuestosPorCodigoNivel(p_codigoNivel)
        If lista.Rows.Count > 0 Then
            Return True
        End If
        Return False
    End Function

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="p_codigoPuesto"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function revisarUsuarioDePuesto(ByVal p_codigoPuesto) As Integer
        Return MultiUsuario.obtenerIDUsuarioPorCodigoPuesto(p_codigoPuesto)
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function listarPuestos() As IDataReader
        Return MultiPuesto.listarDR
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function listarPuestosPorCodigoNivel(ByVal p_codigo) As DataTable
        Dim dt As New DataTable
        dt.Load(MultiPuesto.listarPuestosPorCodigoNivel(p_codigo))
        Return dt
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub eliminarPuesto(ByVal p_codigo As String)
        MultiPuesto.eliminar(CType(p_codigo, Integer))
    End Sub

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerNivelPorCodigoNivel(ByVal p_codigo) As Integer
        Dim objNivel As Nivel
        objNivel = MultiNivel.obtener(p_codigo)
        Return objNivel.nivel
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerTiposSalario() As Dictionary(Of String, Integer)
        Dim opciones = New Dictionary(Of String, Integer)()
        opciones("Fijo") = 1
        opciones("Semi-Variable") = 2
        opciones("Variable") = 3
        Return opciones
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerCodigoTipoSalario(ByVal p_tipoSalario) As String
        If p_tipoSalario = 1 Then
            Return "Fijo"
        End If
        If p_tipoSalario = 2 Then
            Return "Semi-Variable"
        End If
        If p_tipoSalario = 3 Then
            Return "Variable"
        End If
        Return ""
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub actualizarPuesto(ByVal p_codigo As Integer, ByVal p_nombre As String, ByVal p_descripcion As String, ByVal p_nivel As String, _
                              ByVal p_tipoSalario As Integer, ByVal p_salario As String)
        MultiPuesto.actualizar(p_codigo, p_nombre, p_descripcion, CType(p_nivel, Integer), p_tipoSalario, CType(p_salario, Double))
    End Sub

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub actualizarBonificacion(ByVal p_codigoUsuario As String, ByVal p_general As Double, ByVal p_meta As Double)
        MultiBonificacion.actualizarBonificacionGeneral(p_codigoUsuario, p_general)
        MultiBonificacion.actualizarBonificacionMeta(p_codigoUsuario, p_meta)
    End Sub

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerBonificacionGeneral(ByVal p_codigoUsuario As String) As Double
        Return MultiBonificacion.obtenerBonificacionGeneral(p_codigoUsuario)
    End Function

    ''' <summary>
    ''' Propiedad nivel
    ''' </summary>
    ''' <returns>m_nivel
    ''' </returns>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtenerBonificacionMeta(ByVal p_codigoUsuario As String) As Double
        Return MultiBonificacion.obtenerBonificacionMeta(p_codigoUsuario)
    End Function

    ''' <summary>
    ''' Revisa lso rangos
    ''' </summary>
    ''' <param name="p_codigoNivel">Codigo del nivel</param>
    ''' <param name="p_rangoMaximo">Rango maximo</param>
    ''' <returns>Booleano verdadero si el salario es mayor</returns>
    ''' <remarks></remarks>
    Public Shared Function revisarLimitesDeRangosSalariales(ByVal p_codigoNivel As Integer, ByVal p_rangoMaximo As String) As Boolean
        If p_codigoNivel = 1 Then
            Return True
        End If
        Dim rangoSuperior As Double
        Dim ht As Hashtable
        ht = Logica.Gestor.obtenerNivel(p_codigoNivel - 1)
        If rangoSuperior >= ht("salarioMaximo") Then
            Return True
        End If
        Return False
    End Function

#End Region
End Class
